Soru & Cevap

Android JSON Sorunum

18.11.2014 - 04:46

Merhaba. Günlerdir çözemediğim bir hata için yeniden konu açıyorum. Bu kod yapısı neden çalışmaması normal midir? Hata kodu ekte mevcuttur.

MainActivity Kodlarım;

public class MainActivity extends Activity {
    
    //URL to get JSON Array
    private static String url = "https://www.kimonolabs.com/api/27ctyd80?apikey=sssssssssssssss";
    
    //JSON Node Names 
    private static final String TAG_BIRIM = "USDTRY";
    private static final String TAG_DEGER = "Deger";
    private static final String TAG_ACILIS = "Acilis";
    private static final String TAG_ARALIK = "Aralik";
    
    JSONArray USDTRY = null;

 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      
        setContentView(R.layout.activity_main);
        
        // Creating new JSON Parser
        JSONParser jParser = new JSONParser();

        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        
        try {
            // Getting JSON Array
            USDTRY = json.getJSONArray(TAG_BIRIM);
            JSONObject c = USDTRY.getJSONObject(0);
            
            // Storing  JSON item in a Variable
            String degerr = c.getString(TAG_DEGER);
            String aciliss = c.getString(TAG_ACILIS);
            String aralikk = c.getString(TAG_ARALIK);
            
            //Importing TextView
            final TextView degerT = (TextView)findViewById(R.id.uid);
            final TextView acilisT = (TextView)findViewById(R.id.name);
            final TextView aralikT = (TextView)findViewById(R.id.email);
            
          
            degerT.setText(degerr);
            acilisT.setText(aciliss);
            aralikT.setText(aralikk);

        
    } catch (JSONException e) {
        e.printStackTrace();
    }

    }
}

---

JSONParser.java Kodlarım;

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();            

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

 

 

13 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-1372-1408467635.jpg
ahmtbrk
18.11.2014 - 06:34

Anladığım kadarıyla JsonParser isimli kütüphanenin içinde jsonu uzak urlden okuyan bir method mevcut.Fakat sen bu işlemi ui threadda yapmaya çalışıyorsun.Bu sebeple ui thread kilitleniyor ve hata veriyor sanırım hatanın en üstünde networkmainthreadexception veriyor mu?

Thread,AsyncTask benzeri bir şey kullanıp network işlemini ayrı bir threada alıp sonucunu activity'e almalısın.

JsonParser kütüphanesini gidip yazdığın asynctask içinde çağıracaksın

https://gelecegiyazanlar.turkcell.com.tr/konu/android/egitim/android-301/asynctask